package persistence.db;

import java.sql.*;


/*
 * Créé le 15 mars 2010
 *
 * TODO Pour changer le modèle de ce fichier généré, allez à :
 * Fenêtre - Préférences - Java - Style de code - Modèles de code
 */

/**
 * @author Julien
 *
 * TODO Pour changer le modèle de ce commentaire de type généré, allez à :
 * Fenêtre - Préférences - Java - Style de code - Modèles de code
 */
public class ConnectionBD {
	// Nom du serveur
	private String serverName;
	
	// Numéro du port
	private String portNumber;
	
	// Nom de la base de données
	private String sid; 
	
	// Adresse de connection de la BD
	private static String url; 
	
	// Login de connection
	private static String username; 
	
	// Mot de passe de la connection
	private static String password; 
	
	// Variable de connection à la BD
	private static Connection connect = null;

	
	

	/**
	 * Constructeur par défaut
	 */
	public ConnectionBD() {
		serverName = "phoenix.peip.fr";
		portNumber = "1521";
		sid = "XE";
		url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + "/" + sid;
		username = "kpu";
		password = "polytech";
		initialiserConnection();
	}
	
	/**
	 * Constructeur avec tous les arguments
	 * @param serverName
	 * @param portNumber
	 * @param sid
	 * @param username
	 * @param password
	 */
	public ConnectionBD(String serverName, String portNumber, String sid,
			String username, String password) {
		this.serverName = serverName;
		this.portNumber = portNumber;
		this.sid = sid;
		url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + "/" + sid;
		ConnectionBD.username = username;
		ConnectionBD.password = password;
		initialiserConnection();
	}
	
	/**
	 * Fonction d'initialisation. Démarre la connection à la BD
	 */
	public static void initialiserConnection() {
		try {
			//Load the JDBC driver 
			String driverName = "oracle.jdbc.driver.OracleDriver"; 
			System.out.println("coucou");
			Class.forName(driverName);
			System.out.println("coucou");
			
			//Create a connection to the database 
			System.out.println(url);
			connect = DriverManager.getConnection(url, username, password);
			System.out.println("Réussi !");
		} 	
			catch (ClassNotFoundException e) { 
				System.out.println("Could not find the database driver"); 
			} 
			catch (SQLException e) { 
				System.out.println("Could not connect to the database"); 
			} 
		
	}

	/**Fonctions pour afficher tous les résultats d'une requete SQL
	 * @param rset Contient la liste de tous les résultats
	 * @param nomsCols Tableau contenant le nom de chaque colonne
	*/
	public static void afficher(ResultSet rset, String[] nomsCols) {
		for (int i = 0; i < nomsCols.length; i++)
			System.out.print(nomsCols[i]+"\t");
		System.out.println("");
		try {
			while (rset.next()) {
				for (int i = 1; i <= nomsCols.length; i++)
					System.out.print(rset.getString(i)+"\t");				
				System.out.println("");
			}
		} catch (SQLException e) {
			// TODO Bloc catch auto-généré
			e.printStackTrace();
		}
	}
	
	/**
	 * Fonction pour exectuer une requette SQL
	 * @param requette requette en elle-même
	 * @param connect variable de connection à la BD
	 * @param type type de requette
	 * 			1 => SELECT
	 * 			2 => INSERT
	 * 			3 => UPDATE
	 * 			4 => DELETE
	 */
	public static void exectuer (String requette, java.sql.Connection connect, int type) {
		Statement requete;
		int nbRes;
		System.out.println(requette);
		try {
			requete = connect.createStatement();
			if (type == 1) {
				ResultSet rset = requete.executeQuery(requette);
				ResultSetMetaData metadata = rset.getMetaData();
				int nbCol = metadata.getColumnCount();
				
				String[] nomsCols = new String[nbCol];
				for (int i = 0; i < nbCol; i++)
					nomsCols[i] = metadata.getColumnName(i+1);

				afficher(rset, nomsCols);
				rset.close();
			}
			else {
				nbRes = requete.executeUpdate(requette);
				switch (type) {
					case 2:
						System.out.println(nbRes+" ligne(s) insérée(s)");
						break;
					case 3:
						System.out.println(nbRes+" ligne(s) mise(s) à jours");
						break;
					case 4:
						System.out.println(nbRes+" ligne(s) supprimée(s)");
						break;
				}
			}

		requete.close();
		} catch (SQLException e) {
			// TODO Bloc catch auto-généré
			e.printStackTrace();
		}

	}

	public static void main(String[] args) {
		ConnectionBD connection = new ConnectionBD();
			
		String requette1 = "SELECT * FROM CUSTOMER";
		String requette2 = "INSERT INTO CUSTOMER values ('Julien', 'PARIS', 'Rue des tilleuls', 'Montpellier', 'FRANCE')";
		String requette3 = "UPDATE CUSTOMER SET LAST_NAME='Lulu' WHERE FIRST_NAME='Toto'";
		String requette4 = "DELETE FROM CUSTOMER WHERE FIRST_NAME='Julien'";
		
		exectuer (requette1, connect, 1);
		exectuer (requette2, connect, 2);
		exectuer (requette3, connect, 3);
		exectuer (requette4, connect, 4);

	}

}
